package com.example.test06thread.lock8;

import java.util.concurrent.TimeUnit;

/**
 * @Author: fxy
 * @Date: 2022/05/25/10:58
 * @Description:
 */
public class Test3 {
    public static void main(String[] args) {
        Qq3 qq3 = new Qq3();
        Qq4 qq4 = new Qq4();
        new Thread(()->{
            qq3.sendMessage();
        },"A").start();
        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        new Thread(()->{
            qq4.callQq();
        },"B").start();
    }

    /**
     * @Author: fxy
     * @Date: 2022/05/25/11:03
     * @Description:
     */
    static class Qq3 {
        /**
         * synchronized锁的对象是方法的调用者，两个方法用的同一把锁；谁先拿到锁，谁就先执行
         */
        public synchronized void sendMessage() {
            try {
                TimeUnit.SECONDS.sleep(4);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("使用qq发消息");
        }

        public synchronized void callQq() {
            System.out.println("使用qq打电话");
        }

        /**
         * 普通方法，没有锁，不受锁的影响
         */
        public void sayHello() {
            System.out.println("Hello!");
        }
    }

    /**
     * @Author: fxy
     * @Date: 2022/05/25/11:03
     * @Description:
     */
    static class Qq4 {
        /**
         * synchronized锁的对象是方法的调用者，两个方法用的同一把锁；谁先拿到锁，谁就先执行
         */
        public synchronized void sendMessage() {
            try {
                TimeUnit.SECONDS.sleep(4);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("使用qq发消息");
        }

        public synchronized void callQq() {
            System.out.println("使用qq打电话");
        }

        /**
         * 普通方法，没有锁，不受锁的影响
         */
        public void sayHello() {
            System.out.println("Hello!");
        }
    }
}

